#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>

int main(int argc, char const *argv[])
{
	int fd[2]; // 定义数组，存放文件描述符
	int ret = pipe(fd);
	if(ret == -1)
	{
		perror("pipe error\n");
		return -1;
	}
	// 创建子进程
	pid_t son = fork();
	if(son > 0) // 父进程
	{
		char w_buf[1024] = {"hello my son!"};
		char r_buf[1024] = {0};
		// 父进程准备向管道中写入数据
		while(1)
		{
			// 把数据写入写端
			write(fd[1], w_buf, strlen(w_buf));
			sleep(1);
			// 准备读取数据
			read(fd[0], r_buf, 1024);
			printf("父进程收到的数据=%s\n", r_buf);
			sleep(1);
		}
		// 等待子进程的退出
		wait(NULL);
	}
	else if(son == 0) // 子进程
	{
		char w_buf[1024] = {"hello my parent!"};
		char r_buf[1024] = {0};
		// 子进程准备向管道中写入数据
		while(1)
		{
			sleep(1);
			// 读取数据
			read(fd[0], r_buf, 1024);
			printf("子进程收到的数据=%s\n", r_buf);
			sleep(1);
			// 把数据写入写端
			write(fd[1], w_buf, strlen(w_buf));
		}
	}
	
	return 0;
}
